home *** CD-ROM | disk | FTP | other *** search
- {
- > Does anyone know how to increase the size of the keyboard buffer? I need
- > to be able to pump out more than 16 bytes to the buffer.
-
- This is a resident utility I wrote myself for this purpose.
-
- It has to be loaded in conventional memory (NOT LoadHigh) at an address lower
- than $10400, preferrably immediately after Keyb.com.
-
- One warning: there may be programs around (very old XT-programs, or bad
- programs), which will try to access the keyboard buffer at it's standard
- address $40:$1E. If you use one of these programs, the machine will crash.
- }
-
- {*********************************************
- * Installs keyboard buffer of any size *
- * Usage: bigkey [bufparas] *
- * Bufparas: desired size of keyboard buffer *
- * in paragraphs (16 bytes) *
- * default : 10 <-> 79 chars *
- * *
- * The size of the resident program will be *
- * 96 bytes + buffer size. *
- * *
- * Horst Kraemer 2:2410/121.16@fidonet.org *
- * 30.06.92 *
- *********************************************}
-
- program bigkey;
-
- uses
- dos;
-
- const
- PSPOffset=6;
-
- var
- KeyBufTail : word absolute $40:$1A;
- KeyBufHead : word absolute $40:$1C;
- KeyBufStart : word absolute $40:$80;
- KeyBufEnd : word absolute $40:$82;
- EnvSeg,Dist,BufParas,Code:word;
-
- procedure usage;
- begin
- writeln('Usage: bigkey [bufparas]');
- writeln('bufparas: size of buffer in paragraphs (>2)');
- writeln(' default : 10 <-> 79 chars');
- halt(1)
- end;
-
- begin
- if paramcount>1 then Usage;
- if paramcount=0 then
- BufParas:=10
- else begin
- val(paramstr(1),BufParas,Code);
- if (Code<>0) or (BufParas<=2) then Usage
- end;
-
- Dist:=prefixseg+PSPOffset-$40; {Distance BIOS segment <-> start of buffer}
-
- if Dist+BufParas >= $1000 then begin
- writeln('End of buffer not in BIOS segment');
- Halt(1)
- end
- else
- writeln('Buffer for ',BufParas*8-1,' characters installed');
-
- Dist:=Dist shl 4; {Offset of buffer relative to BIOS segment}
-
- asm cli end;
- KeyBufTail := Dist;
- KeyBufHead := Dist;
- KeyBufStart := Dist;
- KeyBufEnd := Dist + BufParas shl 4;
- asm sti end;
-
- { Free environment and leave only
- keyboard buffer in memory
- }
- swapvectors;
- envseg:=memw[prefixseg:$2c];
- asm
- mov es,envseg
- mov ah,49h
- int 21h
- mov dx,PSPOffset
- add dx,BufParas
- mov ax,3100h
- int 21h
- end;
- end.